package com;

import java.util.ArrayList;

/**
 * Noeud du graphe.
 * Contient un modèle, et un ensemble de liens vers d'autres modèles
 * @author florent
 */
public class Node {

	private Modele modele = null; //modèle

	//TODO reverifier structure arbre markov

	private ArrayList<Link> links = new ArrayList<Link>(); //liste des liens

	private static ArrayList<Node> EXISTING_NODE = new ArrayList<Node>();

	/**
	 * Construit un noeud à partir d'un modèle
	 * @param modele
	 */
	private Node(Modele modele){
		this.modele = modele;
	}
	
	public ArrayList<Link> getLinks(){
		return links;
	}

	public static Node newNode(Modele modele){

		Node node = null;
		boolean exists = false;

		for(Node n : EXISTING_NODE){
			if(n.getModele().equals(modele)){
				exists = true;
				node = n;
				break;
			}
		}
		if(exists == false){ //si non trouvé
			node = new Node(modele);
			EXISTING_NODE.add(node);
		}

		return node;
	}

	/**
	 * Ajoute un lien vers un autre modèle
	 * @param modele2
	 * @return le lien
	 */
	public void addLink(Link link){
		links.add(link);
	}

	/**
	 * Retourne le modèle principal du noeud
	 * @return le modèle principal du noeud
	 */
	public Modele getModele(){
		return modele;
	}
	
	public Link getLink(Modele modele){
		for(Link link : links){
			if(link.getModeleDest().equals(modele))
				return link;
		}
		return null;
	}

	public String toString(){
		StringBuffer sb = new StringBuffer();

		sb.append(modele);
		sb.append(" :\n\n");

		for(int i=0;i<links.size();++i){
			sb.append(links.get(i).toString());
		}

		return sb.toString();

	}



}
